# -*- coding: utf8-*- # Eksempler og informasjon for forelesninger om Programmering i MENA1000. # Velkommen! ********************************************************************** # Forelesning 1: Introduksjon, grunnleggende Python programmeringsferdigheter. # I denne forelesningen og i dette programmet skal vi lære litt om det å skrive, # sjekke og kjøre program, hvordan datamaskin og program virker og at datamaskinen # er veldig nøye. Videre skal vi lære om typer av variabler og lister, og se hvordan # vi kan regne med tall, sette sammen tekster til lengre tekster, og skrive ting # på skjermen. # Dette er et program. # Det inneholder linjer med tekst, skrevet i språket Python. # Når det utføres (eksekveres) vil Python oversette det til datamaskin-kommandoer. # Linjer som starter med # oversettes ikke - de er kommentarlinjer :-) # Python oversetter programmet linje for linje, til et komplett utførbart kommandosett. # Linjeskift fungerer derfor som slutten på en kommando. # Videre må du huske at oversetteren leser ord for ord skilt med opphold. # En kommando eller et navn på en variabel eller funksjon må derfor være ett ord. # Du kan bruke bindestrek, men bare underliggende (_), ikke normal (-). # Dersom det er noe oversetteren ikke kjenner igjen og derfor ikke klarer å oversette, # får du en feilmelding: En Syntaksfeil. # Datamaskinen er en pedant! Den har nesten ingen toleranse for feil, og legger # sjelden godviljen til. Til gjengjeld kan du stole på den: Den gjør den det den er # programmert til hver eneste gang. # Neste linje er en programlinje (og flere linjer lenger ned er programlinjer): print "Hei!" # Linjen skriver Hei! på skjermen i det vinduet du kjører Python fra. # Legg merke til at editoren ser vi skriver programmet markerer teksten med farger # når den kjenner igjen programkode. Fargene indikerer at koden er korrekt skrevet. # Sjekk syntaks på dette programmet: (I IDLE går du til Run/Check Module (Alt-X).) # Du får ingen feilmelding. # Prøv nå å endre print til Print eller "Hei!" til "Hei!' i programlinjen. # Legg merke til at fargen forsvinner på ordene. # Når du nå sjekker programmet får du Syntax Error, og en markør viser hvor i programmet # oversetteren ga opp (og der feilen mest sannsynlig er). # Hvis du retter feilen og kjører programmet (Run, Run Module (F5)) vil det printe # Hei! i det vinduet der Python kjører (shell-vindu), samt en rekke etterfølgende ting # som har med programlinjer lenger ned. # I programlinja over brukte vi den for Python kjente kommandoen print samt teksten "Hei!". # Par av " " eller ' ' brukes for å identifisere såkalte tekstvariabler. # Et par nyttige tips: ************************************************************ # Sjekk ut mulighetene i Editorens menyer! # Hvis editoren eller Python tilsynelatende går i stå, kan det være at programmet kjører, # men har gått inn i en evig løkke eller venter på input fra deg. # Hvis du er i Windows kan du da prøve å klikke på vinduet der Pyhon kjører (shell-vinduet) # og så trykke Ctrl-C. # Hvis du bruker LINUX, prøv Ctrl-D. # Eksempel på et program. ***************************************************************** # Regne ut høyden til en ball som funksjon av tiden etter oppkast med starthastighet v0: # y(t) = v0 * t - 1/2 * g * t^2 # Anta at v0 = 5. Vi regner ut høyden ved t = 0.6: # Denne programlinja regner ut høyden korrekt|: y = 5 * 0.6 - 1.0 / 2 * 9.81 * 0.6**2 print "Height = ", y, "m (correct)" # Men denne - tilsynelatende ekvivalente ligningen - gir feil svar: y = 5 * 0.6 - 1 / 2 * 9.81 * 0.6**2 print "Height = ", y, "m (this is wrong)" # Feilen er at siste del av utregningen antas å skulle være et heltall av programmet, # fordi det starter med divisjon av to heltall. Det runder derfor ned til nærmeste heltall. # Vi lærer av dette at rekkefølge på operasjoner og definisjon av type er viktig! # Variabler: ****************************************************************************** # Variabler lagres i datamaskinens minne. Ved å lagre en variabel kan den gjenbrukes. # Det finnes mange typer variabler - de krever forskjellig mengde plass. # I Python settes typen for en variabel - derved lagerplassen - ved første gangs # tilordning av en verdi. # Initialisering, deklarering: ************************************************************ # Int, integer, heltall: Aarstall = 2009 Alder = 39 Ny_alder = Alder + 1 # float, flyttall, desimaltall...deklareres med (engelsk) komma: v0 = 5.0 t = 0.6 NA = 6.022E23 print 'Avogadros tall: ', NA # bool er en variabel som bare kan ha to verdier: True eller False. *********************** Test = False Gammel = True Dele_paa_null = False OK = True print Gammel, Dele_paa_null # Eksempler på tilordning av verdi for boolske variable fra logiske evalueringer: Test = v0 == 4.0 Gammel = Alder >> 40 Gammel = Alder <= 40 print Test, Gammel # Tekststrenger: ************************************************************************* Fornavn = 'Ola' Etternavn = "Nordmann" #Tekststrenger kan settes sammen med +: Navn = Fornavn + ' ' + Etternavn print Navn # Bemerk: Baade ' ' og " " fungerer, men skal ikke blandes. # tuppel, tupler: *************************************************************************** # Tupler er en rekke av konstanter - kan være av forskjellig type: # Tilordning av verdier skjer med en parentes: Litt_forskjellig = ("Ball", "masse", 20.0, "kg", True) # Indeksering (påkalling av bestemte elementer) med klammeparentes: Foerst = Litt_forskjellig[0] Tallet = Litt_forskjellig[2] print Litt_forskjellig[1:4] # Legg merke til at første element er 0 og at et område angis med første brukte og siste ubrukte # (dvs. siste + 1) element. Print-kommandoen over skrev derfor ut "masse 20.0 kg"! # Tupler er nyttige til å formatere utskrifter: # Tekststreng med formaterte variabler inni (se Python-hefte side 9), deretter % og så tuppelen. masse = 20.0 print "%d baller veier %f kg. Det er tyngre enn en %s." % (2278, masse, "golfball") # I denne utskriften kommer det en lang tekst, men der %d, %f og %s erstattes med formaterte # variabler av typen heltall, flyttall og string (tekst). # De forventes å komme i den rekkefølge # de er angitt, og leveres i en tuppel som etterfølger et &-tegn (se eksempelet). # Slik kan vi gi utskrifter et ryddig og forutsigbart utseende. Vi kan bruke et tall sammen # med %d, %f og %s for å angi hvor mange plasser i ustskriften verdien skal bruke: print "%10d baller veier %10f kg. Det er tyngre enn en %10s." % (2278, masse, "golfball") # Vi skal senere bedre se nytten av dette. # List - lister: ****************************************************************************** # Som tuppel, men med variabelt innhold. # Både tilordning og indeksering skjer med klammeparentes. En_liste = ["a", "b", "c", 4] Periode_3 = ["K", "Ca", "Ga", "Ge", "As", "Se", "Br", "Xe"] #Elementene kan i sin tur være lister med elementer (nøstet indeksering/nested indexing): Grunnstoffer = [["H", "He"],["Li", "Be", "B", "C", "N", "O", "F", "Ne"], ["K" ,"Ca", "Al", "Si", "P", "S", "Cl", "Ar"]] Grunnstoffer[2][0:2] = ["Na", "Mg"] # (Her overskriver vi to verdier for å rette feil.) print "The first four elements are:", Grunnstoffer[0], Grunnstoffer[1][0:2] # Vi kan legge til og slette elementer med kommandoene liste.append og del liste: Grunnstoffer.append(Periode_3) print Grunnstoffer del Grunnstoffer[2] print Grunnstoffer # Dict ************************************************************************************** # Indekseres etter forskjellige typer variabler: grunnstoffvekt = {"H":1.00794, "He":4.002602, "Li": 6.941} print grunnstoffvekt["H"] # Legg til: grunnstoffvekt["Be"] = 9.012182 # slett: del grunnstoffvekt["H"] # None: Type som er et ikke-object. ******************************************************** # Casting; skifte type: ******************************************************************** var=1.0 Inn='123.4' # Eksempel: Flyttallsvariabelen var får flyttallsverdien av innholdet i stringvariabelen Inn: var=float(Inn) # Eksempel: Stringvariabelen Inn blir her omgjort til en flyttallsvariabel: Inn=float(Inn) print var, Inn